//
// Created by Administrator on 2022/1/8.
// 宏函数写法
//加上括号表示这是一段表达式(结果不会出错)，宏是原封不动的把值替换，不做任何加工
//宏的返回类型和参数类型不是确定
#define MAX(a, b) (a)>(b)?(a):(b)

#define IS_HEX_CHAR(ch) \
((ch)>='0'&&(ch)<='9')||\
((ch)>='a'&&(ch)<='f')||\
((ch)>='A'&&(ch)<='F')

#include <stdio.h>
#include <stdbool.h>

int main() {
    int max = MAX(1, 2);
    int max2 = MAX(1, MAX(2, 3));
    printf("max:%d\n", max);
    printf("max2:%d\n", max2);
    //灾难发生
    //max加一加了两次，原因：宏是原封不动的把值替换，不做任何加工
    int max3 = MAX(++max, 2);
    printf("max:%d\n", max);
    printf("max3:%d\n", max3);
    //换行宏
    bool b = IS_HEX_CHAR('a');
    printf("%d\n", b);
    return 0;
}

